package cn.com.surker.base.system.service;

import cn.com.surker.base.system.entity.SysStorage;
import cn.com.surker.base.system.entity.SysStorageLine;
import cn.com.surker.base.system.vo.SysStorageLineVo;
import cn.com.surker.base.system.vo.SysStorageVo;
import cn.com.surker.dto.system.SysStorageDTO;
import cn.com.surker.spring.RestResultDto;
import cn.com.surker.system.entity.DataSourceInfo;
import cn.com.surker.system.model.CacheUser;
import cn.com.surker.vo.system.SysStorageVO;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;

public interface SysStorageService {
    /**
     * 根据公司、类型查询仓位信息
     * @param orgId
     * @param type 0:筒仓1:堆场
     * @return
     */
    List<SysStorage> findByOrg(Long orgId, Integer type, Long materialId);

    /**
     * 根据公司、类型查询云端仓位信息
     * @param orgId
     * @param type 0:筒仓1:堆场
     * @return
     */
    List<SysStorage> findCloudByOrg(Long orgId, Long lineId, Integer type, Long materialId);

    /**
     *
     * 加载盘存明细仓位信息
     * @param orgId
     * @return
     */
    List<SysStorageVo> findCloudOrgOrInventory(Long orgId, String today);
    /**
     * 分页方法
     * @param dto
     * @return
     */
    IPage<SysStorageVO> page(SysStorageDTO dto);
    /**
     * 云端分页方法
     * @param storage
     * @return
     */
    IPage<SysStorageVo> cloudPage(SysStorageVo storage, Integer offset, Integer limit);

    /**
     * 新增方法
     * @param dto
     * @param user
     * @return
     */
    Boolean add(SysStorageDTO dto, CacheUser user);

    /**
     * 更新方法
     * @param dto
     * @param user
     * @return
     */
    RestResultDto edit(SysStorageDTO dto, CacheUser user);

    /**
     * 修改状态
     * @param id
     * @param status
     * @param user
     * @return
     */
    Boolean editStatus(Long id, Integer status, CacheUser user);

    /**
     * 查询生产线关联信息
     * @param storageId
     * @return
     */
    List<SysStorageLineVo> findStorageId(Long storageId);

    /**
     * 更新关联信息
     * @param storage
     * @return
     */
    RestResultDto updateStorageCloud(SysStorage storage);

    /**
     * 保存仓位与生产线关联信息
     * @param storageLine
     * @return
     */
    RestResultDto saveStorageLine(SysStorageLine storageLine);

    /**
     * 更新关联信息
     * @param storageLine
     * @return
     */
    RestResultDto updateStorageLine(SysStorageLine storageLine);

	/**
	 * 根据材料查询仓位
	 *
	 * @param materialId
	 * @return
	 */
	List<SysStorage> findByMaterial(Long materialId);


    /**
     * 实时库存
     * @param time
     * @return
     */
    Map<String, List<SysStorageVo>> realTimeStore(String time, String erpDb);

    /**
     * 根据材料查询本地的仓位
     *
     * @param ds         数据源
     * @param materialId 材料id
     * @return
     */
    List<SysStorage> findByMaterial(DataSourceInfo ds, Long materialId);

    /**
     * 查询料仓详情，LED屏显示数据
     * @param dbCode
     * @param lineId
     * @param storageCode
     * @return
     */
    Map<String, Object> findStorageDetail(String dbCode, Long lineId, String storageCode);
}
